package com.dms.common.utils;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

/**
 * MyBatis Plus代码生成器
 */
public class CodeGenerator {
    public static void main(String[] args) {
        // 数据库连接配置
        String url = "jdbc:mysql://localhost:3306/dms_database?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8";
        String username = "root";
        String password = "admin123";

        // 代码生成器
        FastAutoGenerator.create(url, username, password)
            // 全局配置
            .globalConfig(builder -> {
                builder.author("DMS") // 设置作者
                    .enableSwagger() // 开启swagger模式
                    .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
            })
            // 包配置
            .packageConfig(builder -> {
                builder.parent("com.dms") // 设置父包名
                    .moduleName("") // 设置父包模块名
                    .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper")); // 设置mapperXml生成路径
            })
            // 策略配置
            .strategyConfig(builder -> {
                builder.addInclude(".*") // 生成所有表
                    .addTablePrefix("t_") // 设置过滤表前缀
                    // Entity策略配置
                    .entityBuilder()
                    .enableLombok() // 开启lombok
                    .enableTableFieldAnnotation() // 开启生成实体时生成字段注解
                    .enableFileOverride() // 覆盖已有文件
                    // Controller策略配置
                    .controllerBuilder()
                    .enableRestStyle() // 开启生成@RestController控制器
                    .enableFileOverride() // 覆盖已有文件
                    // Service策略配置
                    .serviceBuilder()
                    .formatServiceFileName("%sService") // 格式化service接口文件名称
                    .formatServiceImplFileName("%sServiceImpl") // 格式化service实现类文件名称
                    .enableFileOverride() // 覆盖已有文件
                    // Mapper策略配置
                    .mapperBuilder()
                    .enableMapperAnnotation() // 开启@Mapper注解
                    .enableFileOverride() // 覆盖已有文件
                    .build();
            })
            // 模板引擎配置
            .templateEngine(new FreemarkerTemplateEngine())
            .execute();
    }
} 